package main

import (
	"fmt"
)

func main() {
	n1, n2 := 35,36
	res1 := isPower2(n1)
	res2 := isPower2(n2)
	fmt.Println("res1:",res1)
	fmt.Println("res2:",res2)
}
/*
题目是：不用开方运算，去判断一个数n是不是某个数的平方。
*/
// 解法1： 算是一种暴力解法， 就是通过一个个数字相乘计算。
func isPower1(n int )bool {
	if n <= 0 {
		return false
	}
	for i:=1; i<n; i++ {
		m := i*i
		if m == n {
			return true
		}else if m < n {
			continue
		}else{
			return false
		}
	}
	return false
}
// 二分查找方法---一般需要从头遍历的算法，应该都能改写成这样
func isPower2(n int) bool {
	if n <= 0 {
		return false
	}

	low, high := 1, n
	for low <= high {
		mid := low + (high-low)/2
		m := mid * mid
		if m == n {
			return true
		}else if m < n {
			low = mid + 1
		}else {
			high = mid - 1
		}
	}
	return false
}
// 第三种方法， 减法运算法
// 没有看懂。。。。251页